package com.wxg.java.basic;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName VisitAllJavaDocsDirAndFiles
 *
 * @Description 遍历-JavaDocs-下的所有目录和文件
 *
 * @Author Wxg
 * @Date 2018/11/19 23:39
 * @Version 1.0
 */
public class VisitAllJavaDocsDirAndFiles {

    public static void main(String[] args){
        String rootDir = "F:\\wxg103\\JavaDocs\\Docs\\";
        List<File> fileList = new ArrayList<>();

        collectFiles(new File(rootDir), fileList);

        if (fileList != null && fileList.size() > 0) {
            String ss, aa;
            File file;
            for (int i = 0; i < fileList.size(); i++) {
                file = fileList.get(i);
                aa = file.getParentFile().getName();
                if (aa.contains(" ")) { // 将空格转换为`%20`
                    aa = aa.replace(" ", "%20");
                }
                System.out.print("|");
                ss = String.format("[%s](./Docs/%s/%s)", file.getName(), aa, file.getName());
                System.out.print(ss);
                if ( (i + 1) % 2 == 0 || i == fileList.size() -1 ) {
                    System.out.println("|");
                }
            }
        }
    }

    private static void collectFiles(File startFile, List<File> fileList) {
        File[] files = null;
        if (startFile != null) {
            if (startFile.isDirectory()){
                // 其实这里只用写下面一句就可以了!
                // 第一次传入的一定是根目录-然后进入到这个方法后，如果是文件不会递归调用
                // 所以其他的判断都是必要的！但是这样写了，比较安全-健壮！
                files = startFile.listFiles();
            } else {
                fileList.add(startFile);
            }
        }

        if (files != null && files.length > 0) {
            for (File file : files) {
                if (file.isDirectory()) {
                    if (file.getName().equals("imgs")) {
                        continue;
                    }
                    collectFiles(file, fileList);
                } else {
                    fileList.add(file);
                }
            }
        }
    }
}
